package com.zhongjianjian.elasticjob.utils;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.support.atomic.RedisAtomicLong;

/**
 * 作者: LCG
 * 日期: 2020/2/25 09:14
 * 描述:
 */
public class FuZaiJiSuan {

    /**
     *
     * @param baseKey  基础的rediskey
     * @param zizengKey  自增序列的key
     * @param shardingCount  elasticJob的分片数
     * @return
     */
    public static String getRedisKey(RedisTemplate<String,String> redisTemplate, String baseKey, String zizengKey, int shardingCount){
        //决定将数据放入哪一个ZSET中（做数据的负载-将数据放入不同的ZSET用于分区数据）
        RedisAtomicLong redisAtomicLong=new RedisAtomicLong(zizengKey,redisTemplate.getConnectionFactory());
        //获取一个自增的值
        long andIncrement = redisAtomicLong.getAndIncrement();
        redisAtomicLong=null;
        //然后取模计算
        long index= andIncrement%shardingCount;

        StringBuffer stringBuffer=new StringBuffer(baseKey);
        StringBuffer append = stringBuffer.append(index);
        stringBuffer=null;
        String zsetKey=append.toString();
        return zsetKey;
    }

}
